###fixture的执行顺序影响因素-autouse

'''
影响因素有三：

scope，就是fixture函数的作用范围，比如scope='class'。
dependencies，可能会存在fixture请求了别的fixture，所以产生了依赖关系，也要考虑进去。
autouse，如果autouse=True，那么在作用范围内，这个fixture是最先调用的。

所以，像fixture函数或测试函数的名称、定义的位置、定义的顺序以及请求fixture的顺序，除了巧合之外，对执行顺序没有任何影响。
'''

###autouse=True的fixture函数，那么这个autouse的fixture函数会比请求的其他fixture都要先执行。
###另外，如果fixture a是autouse的，而fixture b不是。而fixture a又请求fixture b，那么fixture b也将变成autouse的fixture ，但仅适用于请求了a的测试。
import pytest


@pytest.fixture
def order():
    print("\n运行order")
    return []


@pytest.fixture
def a(order):
    print("运行a")
    order.append("a")


@pytest.fixture
def b(a, order):
    print("运行b")
    order.append("b")


@pytest.fixture(autouse=True)
def c(a, b, order):
    print("运行c")
    order.append("c")


@pytest.fixture
def d(b, order):
    print("运行d")
    order.append("d")


@pytest.fixture
def e(d, b, order):
    print("运行e")
    order.append("e")


@pytest.fixture
def f(e, order):
    print("运行f")
    order.append("f")


@pytest.fixture
def g(f, c, order):
    print("运行g")
    order.append("g")


def test_order2( g, order):
    assert order == ["a", "b", "c", "d", "e", "f", "g"]